package pt.isel.lercm.projectmanager.managedController.resume;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import pt.isel.lercm.projectmanager.auxobjects.Mode;
import pt.isel.lercm.projectmanager.spring.commons.GenericManagedBeanResume;
import pt.isel.lercm.projectmanager.spring.model.Aluno;
import pt.isel.lercm.projectmanager.spring.model.Grupo;
import pt.isel.lercm.projectmanager.spring.service.IAlunoService;
import pt.isel.lercm.projectmanager.spring.service.IConstanteService;
import pt.isel.lercm.projectmanager.spring.service.IGrupoService;

@ManagedBean(name = "grupoResumeBean")
@ViewScoped
public class GrupoResume extends GenericManagedBeanResume<Grupo> implements Serializable{

	private static final long serialVersionUID = -533440589867452201L;

	@ManagedProperty(value="#{GrupoService}")
	private IGrupoService grupoService;
	
	@ManagedProperty(value="#{AlunoService}")
	private IAlunoService alunoService;
	
	@ManagedProperty(value="#{ConstanteService}")
	private IConstanteService constanteService;
	
	private List<Grupo> grupos;
	
	@Override
	public void init() {
		if (grupos == null){
			if (grupoService.getAllByYear(Integer.parseInt(constanteService.getValorByName("ANO_ACTUAL"))) != null) {
				grupos = new ArrayList<Grupo>(grupoService.getAllByYear(Integer.parseInt(constanteService.getValorByName("ANO_ACTUAL"))));
			}
			else{
				grupos = new ArrayList<Grupo>();
			}
		}
	}
	
	@Override
	public void visualizar(Grupo object) {
		redirectToPage("/app/crud/grupoCrud.xhtml?id="+ object.getId() +"&mode=" + Mode.LEITURA.mode,false);
	}

	@Override
	public void apagar(Grupo object) {
		
		if (object.hasMembers()){
			for (Aluno a : object.getAlunos()){
				a.setGrupo(null);
				alunoService.update(a);
			}
		}
		
		object.setGrupoGithub(null);
		
		grupos.remove(object);
		
		grupoService.delete(object);
		
		FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "O grupo foi apagado com sucesso!", ""));
	}

	@Override
	public void novo() {
		redirectToPage("/app/crud/grupoCrud.xhtml?mode=" + Mode.NOVO.mode,false);		
	}

	public IGrupoService getGrupoService() {
		return grupoService;
	}

	public void setGrupoService(IGrupoService grupoService) {
		this.grupoService = grupoService;
	}

	public IAlunoService getAlunoService() {
		return alunoService;
	}

	public void setAlunoService(IAlunoService alunoService) {
		this.alunoService = alunoService;
	}

	public IConstanteService getConstanteService() {
		return constanteService;
	}

	public void setConstanteService(IConstanteService constanteService) {
		this.constanteService = constanteService;
	}

	public List<Grupo> getGrupos() {
		return grupos;
	}

	public void setGrupos(List<Grupo> grupos) {
		this.grupos = grupos;
	}

}
